package TDALista;

import java.util.Iterator;
/**
 * Clase ElementIterator que extiende de Iterator 
 */
public class ElementIterator<E> implements Iterator<E> {

	protected PositionList<E> list; 
	protected Position<E> cursor; //la siguiente posicion.

	/**
	 * Constructor de la clase: crea un elemento iterador
	 * @param PositionList:lista que usa para crear el elemento iterador
	 */
	public ElementIterator(PositionList<E> L) {
		list=L;
		try{
		cursor= (list.isEmpty())? null:list.first();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
/**
 * Devuelve true si existe un elemento luego de la posicion actual del iterador	
 */
	public boolean hasNext() {
		return (cursor != null);
	}
	
/**
 * Retorna el elemento de la posicon actual y setea la posicion al proximo elemento	
 */
	public E next(){
		E toReturn =null;
		if (cursor!=null) {
			toReturn=cursor.element();
			Position<E> aux=null;
			try{
				aux=list.last();
			}catch(Exception e){}
			if (cursor==aux)
				cursor=null;
			else
				try{
					cursor=list.next(cursor);
				}catch(Exception e){
					e.printStackTrace();
					}	
	}
		return toReturn;
}

/**
 * Metodo no implementado, no es necesario ya que no se usa nunca.
 */
	public void remove() {
		
		
	}
	
}
